
#指定CMake的最小版本
cmake_minimum_required(VERSION 3.4.1)

#需要修改的地方

#1.生成的java文件，也就是要打包生成的jar包里面的文件
#修改包名"com.geo.hello"即可，生成的位置在app/src/main/java目录下面
set(JAVA_GEN_PACKAGE "com.geo.hello")

#2.生成的.so的名称
set(LAST_SO_NAME "hello")


#寻找安装好的swig
find_package(SWIG REQUIRED)
include(${SWIG_USE_FILE})

#swig.exe -c++ -java -package com.geo.java -outdir F:/AllProjects/EarthworkLib/app/src/main/java/com/cjh/hello -o Unix_wrap.cxx Unix.i
# -o Unix_wrap.cxx Unix.i
# -c++ 指定当前语言是C++还是C，默认是C，只有这两种，没有其他的
# -java 生成的包装语言,可以使其他任何一种支持的语言 如-python -csharp
# -package 生成的swig java类的包名
# -outdir java文件放在哪里
# -o 输出的CXX文件的文件名
# i文件路径

#PROJECT_SOURCE_DIR 指的是当前CMakeList.txt文件所在的目录下面，这里默认就是app/src/main/cpp
string(REPLACE "." "/" JAVA_GEN_SUBDIR ${JAVA_GEN_PACKAGE})
#PROJECT_JAVA_PATH=app/src
string(REGEX REPLACE "(.*)/(.*)/(.*)" "\\1" PROJECT_JAVA_PATH  ${PROJECT_SOURCE_DIR})
set(JAVA_GEN_DIR ${PROJECT_JAVA_PATH}/main/java/${JAVA_GEN_SUBDIR})
set(SOURCE_GEN_DIR ${PROJECT_SOURCE_DIR})

#JAVA文件输出目录 --app/src/main/java
set(CMAKE_SWIG_OUTDIR ${JAVA_GEN_DIR})
#输出的UnixJAVA_wrap.cxx文件等的位置-和CMakeList文件路径相同
set(SWIG_OUTFILE_DIR ${SOURCE_GEN_DIR})
#指定包名 -package
set(CMAKE_SWIG_FLAGS -c++ -package ${JAVA_GEN_PACKAGE} )
#c++模式 Unix.i在当前目录下直接写即可
set_property(SOURCE Unix.i PROPERTY CPLUSPLUS ON)
#开始生成，其实就是开始执行命令行
swig_add_library(swig LANGUAGE java SOURCES Unix.i)


#设置生成的so输出的路径--app/src/main/libs
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_JAVA_PATH}/main/libs/${ANDROID_ABI})

#创建一个静态或者动态库，并提供其关联的源文件路径，开发者可以定义多个库，
#CMake会自动去构建它们。Gradle可以自动将它们打包进APK中。
#第一个参数——LAST_SO_NAME：是库的名称
#第二个参数——SHARED：是库的类别，是动态的还是静态的
#第三个参数——src/main/cpp/UnixJAVA_wrap.cxx：是库的源文件的路径
add_library(${LAST_SO_NAME} SHARED ${Project_SOURCE_DIR}/UnixJAVA_wrap.cxx )